অ্যাপাচি আইভি (Apache Ivy) একটি শক্তিশালী ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা বিশেষ করে Java প্রোজেক্টের জন্য ব্যবহৃত হয়। এটি multi-module প্রোজেক্ট পরিচালনা করার জন্যও বেশ উপযোগী। Multi-module প্রজেক্ট এমন একটি প্রোজেক্ট যেখানে একাধিক সাব-মডিউল থাকে এবং প্রতিটি সাব-মডিউল আলাদাভাবে পরিচালনা করা হয়।
এখানে, আমরা আলোচনা করব কিভাবে অ্যাপাচি আইভি ব্যবহার করে multi-module প্রজেক্ট পরিচালনা করা যায় এবং এই ধরনের প্রোজেক্টের জন্য প্রয়োজনীয় কনফিগারেশনগুলি কীভাবে সেটআপ করতে হয়।
Multi-module project হল একটি প্রোজেক্ট যেখানে একাধিক সাব-মডিউল বা উপ-প্রোজেক্ট থাকে। সাধারণত, এই ধরনের প্রোজেক্টে প্রতিটি মডিউল নিজে একটি স্বাধীন প্রোজেক্ট হিসেবে কাজ করে, তবে তারা একটি মূল প্রোজেক্টের অংশ হিসেবে একসাথে কাজ করে।
একটি উদাহরণ হিসেবে, ধরুন আপনার একটি মূল parent-project
রয়েছে এবং এর মধ্যে দুটি সাব-মডিউল module-a
এবং module-b
আছে। প্রতিটি মডিউল তার নিজস্ব ডিপেনডেন্সি এবং কনফিগারেশন থাকতে পারে, তবে তারা একে অপরের সাথে নির্ভরশীল হতে পারে।
আইভি দিয়ে multi-module প্রোজেক্ট পরিচালনা করার জন্য আপনাকে কয়েকটি কনফিগারেশন ফাইল সেটআপ করতে হবে, যেমন ivy.xml
, ivysettings.xml
, এবং সাব-মডিউলের জন্য আলাদা কনফিগারেশন ফাইল।
ivy.xml
কনফিগারেশনপ্রথমে, মূল প্রোজেক্ট (parent module) এর জন্য ivy.xml
ফাইল তৈরি করুন। এতে সমস্ত সাব-মডিউল এবং তাদের ডিপেনডেন্সি উল্লেখ করতে হবে।
<ivy-module version="2.0">
<info organisation="com.example" module="parent-project" revision="1.0"/>
<!-- Dependencies for the parent project -->
<dependencies>
<dependency org="com.example" name="module-a" rev="1.0"/>
<dependency org="com.example" name="module-b" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে, parent-project মডিউলটি module-a এবং module-b নামক দুটি মডিউলকে ডিপেনডেন্সি হিসেবে অন্তর্ভুক্ত করছে।
ivy.xml
কনফিগারেশনপ্রতিটি সাব-মডিউল (যেমন module-a এবং module-b) এর নিজস্ব ivy.xml
ফাইল থাকতে হবে, যেখানে সাব-মডিউলের ডিপেনডেন্সি এবং প্রকাশের তথ্য থাকবে।
Module A এর ivy.xml
উদাহরণ:
<ivy-module version="2.0">
<info organisation="com.example" module="module-a" revision="1.0"/>
<dependencies>
<dependency org="com.example" name="module-b" rev="1.0"/>
</dependencies>
</ivy-module>
এখানে, module-a module-b এর উপর নির্ভরশীল।
Module B এর ivy.xml
উদাহরণ:
<ivy-module version="2.0">
<info organisation="com.example" module="module-b" revision="1.0"/>
<dependencies>
<!-- Add any dependencies for module-b -->
</dependencies>
</ivy-module>
Module B এর জন্য এখানে কোন অতিরিক্ত ডিপেনডেন্সি নেই, তবে আপনি এটি নির্দিষ্ট করতে পারেন।
Ivysettings.xml ফাইলটি রেপোজিটরি, ক্যাশ, এবং রেজলভার কনফিগার করার জন্য ব্যবহৃত হয়। এটি মূলত সমস্ত মডিউলের জন্য ডিপেনডেন্সি সংগ্রহের জন্য একটি কেন্দ্রীয় কনফিগারেশন।
<ivysettings>
<resolvers>
<resolver name="central" class="org.apache.ivy.plugins.resolver.URLResolver">
<url value="https://repo1.maven.org/maven2"/>
</resolver>
</resolvers>
<cache name="default-cache" path="${user.home}/.ivy2/cache"/>
</ivysettings>
এখানে, Maven Central Repository থেকে ডিপেনডেন্সি ডাউনলোড করার জন্য URLResolver
ব্যবহার করা হচ্ছে।
এখন আপনি চাইলে মূল প্রোজেক্টে retrieve টাস্ক চালিয়ে সমস্ত ডিপেনডেন্সি রিট্রিভ করতে পারেন।
<target name="retrieve-dependencies">
<ivy:retrieve/>
</target>
এই টাস্কটি মূল প্রোজেক্ট এবং সাব-মডিউলগুলো থেকে সমস্ত ডিপেনডেন্সি সংগ্রহ করবে এবং আইভির ক্যাশে সংরক্ষণ করবে।
যেহেতু Apache Ivy মূলত Apache Ant এর সাথে ব্যবহৃত হয়, তাই আপনি Ant ব্যবহার করে বিল্ড টাস্কগুলি পরিচালনা করবেন। Ant ফাইলগুলিতে বিভিন্ন সাব-মডিউলগুলির বিল্ড এবং ডিপেনডেন্সি রিট্রিভাল নির্ধারণ করা যেতে পারে।
<project name="multi-module-project" basedir="." default="retrieve-dependencies">
<target name="retrieve-dependencies">
<ivy:retrieve/>
</target>
<!-- Add other build targets as necessary -->
</project>
এখন আপনার multi-module প্রোজেক্টে, যখন আপনি retrieve-dependencies
টাস্ক চালাবেন, এটি সমস্ত সাব-মডিউলের ডিপেনডেন্সি রিট্রিভ করবে এবং সেগুলি লোকাল ক্যাশে সঞ্চিত থাকবে। এরপর, আপনি Ant ব্যবহার করে প্রয়োজনীয় বিল্ড টাস্কগুলি চালাতে পারেন।
এইভাবে আপনি Ivy ব্যবহার করে একটি multi-module project কার্যকরভাবে পরিচালনা করতে পারেন, যেখানে একাধিক মডিউল একে অপরের উপর নির্ভরশীল থাকে এবং সমস্ত ডিপেনডেন্সি সমন্বিতভাবে পরিচালিত হয়।
common.read_more